缓冲分析 Sample详情

最后更新时间:2019年7月5日

邻近度(Proximity)描述了地理空间中两个地物距离相近的程度,其确定是空间分析的一个重要手段。如公共设施(商场,邮局,银行,医院,车站,学校等)的服务半径,大型水库建设引起的搬迁,铁路,公路以及航运河道对其所穿过区域经济发展的重要性等,均是一个邻近度问题。缓冲区分析是解决邻近度问题的空间分析工具之一 。

所谓缓冲区就是在点、线、区实体周围建立一定宽度范围的多边形。换言之,任何目标所产生的缓冲区总是一些多边形,这些多边形将构成新的数据层。点的缓冲区,以点的中心坐标为圆心,做半径为缓冲半径的圆;线的缓冲区,根据左右半径的设置形成缓冲区;区的缓冲区,将原始区图元边界向外或向内偏移缓冲半径大小后的区。点、线、区的缓冲分析采用同一套接口,实现方法类似。

1 点缓冲分析

1

获取分析对象

查看缓冲分析的buffer方法,接口参数中分析的对象是MGSGeometry(几何对象基类),所以首先需获取待分析的对象。主要有以下三种方式获取MGSGeometry对象:

//要素查询
MGSFeaturePagedResult *queryResult=[featureQuery query];
//获取查询结果要素
MGSFeature *feature=[[queryResult getPageWithPageNumber:i]j];
//获取要素几何信息
MGSGeometry *geometry=[feature geometry];
//坐标点
MGSDot dot=MGSDotMake(12726121, 3610763);
//创建点图形对象
MGSGraphicPoint *graphicPoint=[[MGSGraphicPoint alloc] initWithPoint:dot andSize:8];
//将图形对象转换为几何对象
MGSGeometry *geometry=[MGSGraphic toGeometryWithGraphic:graphicPoint];
//创建几何对象
MGSGeoPoint *geoPoint=[[MGSGeoPoint alloc] initWithDot3D:MGSDot3DMake(12726121, 3610763, 0)];

2

构造空间分析对象并缓冲分析

//实例化空间分析对象
MGSSpaAnalysis *bufferAnalysis=[[MGSSpaAnalysis alloc] init];
//执行缓冲分析功能(待分析几何对象、左半径、右半径)
MGSGeoPolygons *geoPolygons=[bufferAnalysis buffer:geometry leftDis:800 rightDis:800];

SDK提供给了两个缓冲分析的接口,可根据需要选择。

接口 说明
- (MGSGeoPolygon*)buffer:(MGSGeometry*)geom leftDis:(double)leftDis rightDis:(double)rightDis endCapStyle:(short) endCapStyle;
参数:几何对象、左半径、右半径、缓冲区边界类型0/1/2-圆角/垂直/平角
计算左右缓冲区
-(MGSGeoPolygons*)buffer:(MGSGeometry*)geom leftDis:(double)leftDis rightDis:(double)rightDis;
参数:几何对象、左半径、右半径
计算左右缓冲区(圆角边界)

重要说明:

(1)接口中可以设置左半径、右半径,针对不同类型的几何对象具有不同的作用。 【1】对于点缓冲分析,没有左半径、右半径之说,接口规定分析的半径以左半径参数为准,所以只需要设置左半径即可。 【2】对于线缓冲,可以根据线的节点先后顺序确定线要素的方向,从而根据线的方向确定左右半径。 【3】对于区缓冲,同样没有左右半径之说,只是对区进行外部缓冲分析,接口规定点缓冲分析的半径以左半径参数为准,所以只需要设置左半径即可。

(2)第一个方法中通过第4个参数可以设置缓冲区边界类型为圆角、垂直、平角三种类型,得到的效果不一样。对于点缓冲区分析,只支持圆角和平角边界,区缓冲只只支持圆角边界;线缓冲三种边界类型都支持。

3

分析结果处理

缓冲分析得到的结果为MGSGeoPolygons多区几何对象,根据应用需求,可以将其保存到地理要素中,也可以进行绘制显示,例如:

//将几何对象MGSGeoPolygons转换为几何图形MGSGraphic
NSArray<MGSGraphic *> *graphicResult=[MGSGraphic toGraphicsFromGeometry:geoPolygons];

//一:可以直接按照默认样式快速绘制
[mapView.graphicsOverlay addGraphics:graphicResult];

//二:可以为图形设置自定义颜色再进行绘制
for (int i=0; i<[graphicResult count]; i++) {
    [graphicResult[i] setColor:[UIColor colorWithRed:253.0/255.0 green:212.0/255.0 blue:3.0/255.0 alpha:100.0/255.0]];
    [mapView.graphicsOverlay addGraphic:graphicResult[i]];
}
[mapView refresh];   //刷新地图

点缓冲分析的展示效果如下图所示:

点缓冲1.jpg 点缓冲2.jpg


2 线缓冲分析

线缓冲分析的实现方法与点缓冲分析类似,区别只在于传递的待分析的几何对象类型不一致。

//构建坐标点
MGSDot dot1=MGSDotMake(12728604, 3613047);
MGSDot dot2=MGSDotMake(12724826, 3607732);

//创建线图形对象并绘制
MGSGraphicPolylin *graphicPolyLin=[[MGSGraphicPolylin alloc] init];
//添加点、设置线图形样式(填充颜色、线宽)
[graphicPolyLin appendPoint:dot1];
[graphicPolyLin appendPoint:dot2];
[graphicPolyLin setColor:[UIColor colorWithRed:255.0/255.0 green:154.0/255.0 blue:0/255.0 alpha:255.0/255.0]];
[graphicPolyLin setLineWidth:5];
[_mapView.graphicsOverlay addGraphic:graphicPolyLin];

//将线图形转为线几何要素以待分析
MGSGeometry *geometry=[MGSGraphic toGeometryWithGraphic:graphicPolyLin];

分析的效果如下图所示:

线缓冲.jpg 线缓冲.jpg 线缓冲.jpg


3 区缓冲分析

与点缓冲分析方法类似。

//坐标点
MGSDot dot1=MGSDotMake(12724496, 3612257);
MGSDot dot2=MGSDotMake(12727000, 3612257);
MGSDot dot3=MGSDotMake(12728471, 3609357);
MGSDot dot4=MGSDotMake(12727000, 3607161);
MGSDot dot5=MGSDotMake(12724957, 3607161);

//创建区图形
MGSGraphicPolygon *graphicPolygon=[[MGSGraphicPolygon alloc] init];
[graphicPolygon appendPoint:dot1];
[graphicPolygon appendPoint:dot2];
[graphicPolygon appendPoint:dot3];
[graphicPolygon appendPoint:dot4];
[graphicPolygon appendPoint:dot5];
[graphicPolygon appendPoint:dot1];
[graphicPolygon setColor:[UIColor colorWithRed:255.0/255.0 green:154.0/255.0 blue:0/255.0 alpha:255.0/255.0]];
//区图形绘制
[mapView.graphicsOverlay addGraphic:graphicPolygon];

//将图形对象转换为几何对象
MGSGeometry *geometry=[MGSGraphic toGeometryWithGraphic:graphicPolygon];

区缓冲分析的结果如下图所示:

区缓冲.jpg